package guiservice.common.controls.handlers;

import java.util.Hashtable;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
public class KeyEventArgs {

    private String key, modifier;

    private boolean isPressed;

    private static Hashtable<String, String> mapCodeToChar = new Hashtable() {
        {
            put("0", "0");
            put("1", "1");
            put("2", "2");
            put("3", "3");
            put("4", "4");
            put("5", "5");
            put("6", "6");
            put("7", "7");
            put("8", "8");
            put("A", "a");
            put("AShift", "A");
            put("B", "b");
            put("BShift", "B");
            put("C", "c");
            put("CShift", "C");
            put("D", "d");
            put("DShift", "D");
            put("E", "e");
            put("EShift", "E");
            put("F", "f");
            put("FShift", "F");
            put("G", "g");
            put("GShift", "G");
            put("H", "h");
            put("HShift", "H");
            put("I", "i");
            put("IShift", "I");
            put("J", "j");
            put("JShift", "J");
            put("K", "k");
            put("KShift", "K");
            put("L", "l");
            put("LShift", "L");
            put("M", "m");
            put("MShift", "M");
            put("N", "n");
            put("NShift", "N");
            put("O", "o");
            put("OShift", "O");
            put("P", "p");
            put("PShift", "P");
            put("Q", "q");
            put("QShift", "Q");
            put("R", "r");
            put("RShift", "R");
            put("S", "s");
            put("SShift", "S");
            put("T", "t");
            put("TShift", "T");
            put("U", "u");
            put("UShift", "U");
            put("V", "v");
            put("VShift", "V");
            put("W", "w");
            put("WShift", "W");
            put("X", "x");
            put("XShift", "X");
            put("Y", "y");
            put("YShift", "Y");
            put("Z", "z");
            put("ZShift", "Z");
            
            put("Period", ".");
            put("SemicolonShift", ":");
            put("Semicolon", ";");
            put("Space", " ");
            put("Backspace", "Backspace");
            put("1Shift", "!");
        }
    };


    @Override
    public String toString() {
        return String.format("KeyEventArgs{key='%s', modifier='%s', isPressed=%s}", key, modifier, isPressed);
    }

    public String getKey() {
        return key;
    }

    public boolean isPressed() {
        return isPressed;
    }

    public String getSymbol() {
        String k = String.format("%s%s", key, modifier);        
        System.out.println(k);
        return mapCodeToChar.containsKey(k) ? mapCodeToChar.get(k) : "";
    }
}
